import matplotlib.pyplot as plt
import pandas as pd

# 字典创建DataFrame
df = pd.DataFrame({'姓名':["David", "Lisi", "Lena"],
                   '年龄':[18, 20, 19],
                   '成绩':[98, 89, 90]},
                  index=['h1', 'h2', 'h3'])
print(df)

# 1、选择单列
print(df['年龄'])

# 2、选择多列
print(df[['姓名','成绩']])

# 3、筛选
print(df[df['成绩']>90])

# 4、loc iloc
print(df.loc['h1'])       # 行标签
print(df.iloc[1])       # 按行来说，下标索引

# 5、关于添加列
# 既然我们可以使用字典创建表格，那么就可以使用字典添加的方式，添加列
df['是否为优秀'] = df['成绩'] >= 90
print(df)

print("===================================")

import pandas as pd

# 准备数据
df1 = pd.DataFrame({
    'ID':[1, 2, 3],
    'Name':['张三', '李四', '王五']
})
print("表1\n", df1)
df2 = pd.DataFrame({
    'Score':[98, 85, 90],
    'ID':[2, 3, 4]
})
print("表2\n", df2)
"""
pd.merge() 作用：按列合并多表，类似于SQL语句中多表操作
关键参数：
left: 作为左表  这里可以写 df1
right: 作为右表 这里可以写 df2
how: 连接方式 left/right/inner/outer/cross
on: 共用列名（两表列名需要一致） 这里可以是ID
left_on/right_on:   左右表不同列名的匹配
suffixes: 处理重复列名的后缀
"""

# 1. 基础合并，默认值inner 内连接 仅保留两表中都存在的
ret1 = pd.merge(df1, df2, on='ID')
print(ret1)

# 2. 外连接 how='outer' 保留所有行,缺失值填NaN
ret2 = pd.merge(df1, df2, on='ID', how='outer')
print(ret2)

# 3. 左连接 how='left' 保留左表所有行,右表匹配不到填NaN
ret3 = pd.merge(df1, df2, on='ID', how='left')
print(ret3)

print("===============================")
import numpy as np
import pandas as pd

# 字典创建DataFrame
df = pd.DataFrame({'班级':['A', 'B', 'A', 'A', 'B'],
                   '成绩':[1, 2, 3, 4, 5]})
print(df)

group_df = df.groupby('班级')
print(group_df)
print("=================")
print(group_df.sum())
print("=================")
print(group_df.agg(['sum', 'mean', 'max', 'min']))

